import pandas as pd
import numpy as np

# 1.从字典创建DataFrame
# 字典的键表示列名，字典的值表示列中的数据。
# 每个字典的值可以是列表、数组或其他可迭代对象。

data = {
    'A':[1,2,3],
    'B':[4,5,6],
    'C':[7,8,9]
}
df = pd.DataFrame(data)
print(df)


# 2.从嵌套列表（或嵌套数组）创建DataFrame
# 使用嵌套列表或数组，每个内层列表或数组会作为一行数据。
data1 = [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
df = pd.DataFrame(data1, columns=['A', 'B', 'C'])
print(df)

data2 = [
    [1, 'Alice', 25],
    [2, 'Bob', 30],
    [3, 'Charlie', 35]
]
df = pd.DataFrame(data2, columns=['ID', 'Name', 'Age'])
print(df)


# 3.从NumPy数组创建DataFrame
# 可以通过 NumPy 数组来创建 `DataFrame`，通常是将二维数组作为数据源，并通过 `columns` 参数指定列名。
# numpy的每一行也就是DataFrame中的每一行
data = np.array([[1, 4, 7], [2, 5, 8], [3, 6, 9]])
df = pd.DataFrame(data,columns=['A','B','C'])
print(df)


# 4.从列表的字典创建 DataFrame
# 每个字典表示一行数据，字典的键表示列名。
data = [{'A': 1, 'B': 4, 'C': 7}, {'A': 2, 'B': 5, 'C': 8}, {'A': 3, 'B': 6, 'C': 9}]
df = pd.DataFrame(data)
print(df)

# 5.从Series 创建 DataFrame
#  如果你有多个 `Series`，可以将它们组合成一个 `DataFrame`。每个 `Series` 会变成 `DataFrame` 中的一列。
# Series的name会变成DataFrame的列索引
s1 = pd.Series([1, 2, 3], name='A')
s2 = pd.Series([4, 5, 6], name='B')
df = pd.DataFrame({s1.name: s1, s2.name: s2})
print(df)


# 6. 从字典的字典创建 `DataFrame`
# 这种方式用于创建更复杂的嵌套结构，外层字典代表列，内层字典代表行。
data = {'A': {0: 1, 1: 2, 2: 3},
        'B': {0: 4, 1: 5, 2: 6},
        'C': {0: 7, 1: 8, 2: 9}}
df = pd.DataFrame(data)
print(df)


# 7.指定列名或行名
# 在Pandas中，创建一个DataFrame时，你可以通过`columns`参数来指定列名，使用`index`参数来指定行名。
# 数据
data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# 列名和行名
columns = ['A', 'B', 'C']
index = ['row1', 'row2', 'row3']
# # 创建DataFrame
df = pd.DataFrame(data, columns=columns, index=index)
print(df)


# 8. 指定某列为行索引
# 在使用Pandas创建DataFrame时，如果你指定A列为index，Pandas会将A列中的数据作为索引，而A列中的"A"（即列名）会被忽略，不会出现在数据中。
# 原来的数据默认A、B、C为列名，但在指定A列为索引后，列名将只包含B和C。
# 原始数据
data = {
    'A': ['r', 'e', 'f'],
    'B': [4, 'e', 'r'],
    'C': [1, 2, 3]
}
# 创建DataFrame，并指定A列为索引
df = pd.DataFrame(data).set_index('A')
print(df)

# 从其他格式的数据创建DataFrame
# 从 SQL 查询结果创建：pd.read_sql()
# 从 CSV 或 Excel 文件读取数据：pd.read_csv()、pd.read_excel()
# 从 CSV 或 Excel 文件读取数据：pd.read_csv()、pd.read_excel()
